package com.probiz.estore.catalog.service;

import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import com.probiz.estore.catalog.model.VirtualCategoryFullyModel;
import com.probiz.estore.catalog.model.VirtualCategorySearchCriteria;
import com.probiz.estore.common.model.catalog.VirtualCategory;
import com.probiz.estore.core.search.SearchCriteria;

/**
 * Manager interface for VirtualCategory, responsible for business processing, and communicate between web and persistence layer.
 *
 */
public interface VirtualCategoryManager extends BaseCategoryManager<VirtualCategory> {
	 /* =========================start:自定义方法=========================================== */
    /**
     * 完全保存函数
     *
     * @param model 要保存的虚拟目录
     * @return 返回参数
     */
    public Map<String, Object>  saveFully(VirtualCategoryFullyModel model);

    /**
     * 完全删除函数
     *
     * @param virtualCategory 要删除的虚拟目录
     * @return 返回参数
     */
    public Map<String, Object>  deleteFully(VirtualCategory virtualCategory);

    /**
     * 获取指定目录编码的目录
     *
     * @param categoryCode 目录编码
     * @return 包含指定目录编码的目录实体
     */
    public VirtualCategory getCategoryByCode(String categoryCode);

    /**
     * 搜索目录
     *
     * @param virtualCategorySearchCriteria 自定义搜索条件
     * @param searchCriteria                分页搜索条件
     * @return 目录搜索结果列表
     */
    public List<VirtualCategory> searchByCriteria(VirtualCategorySearchCriteria virtualCategorySearchCriteria, SearchCriteria searchCriteria);

    /**
     * 将内容目录列表转换为JSONArray对象
     *
     * @param categoryList 内容目录List对象
     * @return 内容目录JSONArray对象
     */
    public JSONArray convertListToJSONArray(List<VirtualCategory> categoryList);


    /* =========================end:自定义方法=========================================== */

    /* =========================start:前台自定义方法=========================================== */

    /**
     * 根据前台uri获得目录id
     *
     * @param uri 前台uri
     * @return 目录id
     */
    public Integer getCategoryIdByUri(String uri);

    /**
     * 根据目录id获得前台uri
     *
     * @param categoryId 目录id
     * @return 前台uri
     */
    public String getUriByCategoryId(Integer categoryId);

    /**
     * 获取导航目录，即获得上级目录和自身目录，不包括根目录
     *
     * @param categoryId 目录主键
     * @return 导航目录。例如 获得金币[卖家帮助，会员服务]
     */
    public List<VirtualCategory> getNavigationCategories(Integer categoryId);
	/* =========================end:前台自定义方法=========================================== */

}
